/*
 * Copyright (c) 2015 xiaofanku
 * mail:xiaofanku@live.cn
 
 * build on jQuery 1.8.1
 * Versions
 * 0.0.2 - 20150426
 *
*/
(function($){
        'use strict';
        $.apoMenu=(function(){
            var ApoMenu,MultiApoMenu,_build_dom_relation,_menu_calc_position,_bind_menu_event,_get_segment_dom;
            //构造函数
            //获得元素：存在返回,dom不存在创建
            function ApoMenu(target,option){
                if($(target).length>1){
                    return MultiApoMenu.call(this,target,option);
                }
                var et;
                if(option.isDom){
                    et= $(option.menu);
                }else{
                    et= _build_dom_relation(option.menu,option.box,target);
                }
                _bind_menu_event(target,et,option.eventype);
            };
            //不在开始时构造dom
            function MultiApoMenu(target,option){
                $(target).each(function(i,item){
                        if(option.isDom){//菜单已经存在
                                _bind_menu_event(item,$(item).parents(option.box).find(option.menu),option.eventype);
                        }else{
                                _bind_menu_event(item,_build_dom_relation(option.menu,option.box,item),option.eventype);
                        }
                });
            };
            //dom不存在时创建父子关系
            _build_dom_relation=function(menu,box,target){
                var self=$(target),attrs='',posObj,m,zx,isExistMenu=false;
                //生成新的菜单标识
                var menu_symbol=Math.floor(Math.random()*9999);
                    menu_symbol='apoMenu_'+menu_symbol;
                if(self.next('.apo_menu').length>0){ isExistMenu=true;}
                //box是否存在
                if(!isExistMenu){
                    if(self.parents(box).length>0){
                        //已经存在,直接入到box中
                        self.parents(box).append(_get_segment_dom(menu,menu_symbol));
                    }else{
                        if(box.indexOf('#')!==-1){
                            attrs='id="{E}"';
                        }else{
                            attrs='class="{E}"';
                        }
                        self.wrap('<div {DF}></div>'.replace('{DF}',attrs.replace('{E}',box.substring(1))));
                        self.parent().append(_get_segment_dom(menu,menu_symbol));
                    }
                }
                if(isExistMenu){ menu_symbol=self.next('.apo_menu').attr('id');}
                
                m=self.parent().find('#'+menu_symbol);
                zx=!!(self.css('zIndex') && !isNaN(self.css('zIndex')))?self.css('zIndex'):9999
                posObj=_menu_calc_position(self,m);
                return m.addClass('apo_menu').css({position:'absolute',top:posObj.top,left:posObj.left,zIndex:zx});
            };
            //计算菜单的:top,left;right
            _menu_calc_position=function(element,menu){
                 var l,t,_menuW,_elementOF,_winW=0;
                 _menuW=menu.width();//菜单的宽度
                 _winW=$(document).width();//总宽度
                 _elementOF=element.offset().left;//事件源距左的距离
                 t=parseInt(element.offset().top)+parseInt(element.height());
                 //盒子是否是fixed定位
                 if(element.parent().css('position')!=='fixed'){
                     l=0;t=element.height();
                 }else{
                     if(_elementOF+_menuW>_winW){
                         l=_winW-_menuW-5;//留出5px间隙
                     }else{
                         l=_elementOF;
                     }
                 }
                 return {
                     top:t,
                     left:l
                 }
            };
            //绑定事件
            _bind_menu_event=function(target,menu,event_type){
                if(event_type==='click'){
                    $(target).on('click',function(e){
                        e.preventDefault();
                        menu.toggle();
                    });
                }
                if(event_type==='inout'){
                    $(target).parent().on({
                        mouseover:function(){
                            menu.show();
                        },
                        mouseout:function(){
                            menu.hide();
                        }
                    });
                }
            };
            //获取片段的dom
            //过滤掉片段的元素属性
            _get_segment_dom=function(menu,symbol){
                return $('<div></div>').attr('id',symbol).append($(menu).children().clone());
            };
            return ApoMenu;
            
        }());
}(jQuery));
